package br.com.sixsoftware.helpdesk.business;

import java.util.List;

import org.apache.commons.lang.StringUtils;

import br.com.sixsoftware.helpdesk.domain.Cliente;
import br.com.sixsoftware.helpdesk.exception.NegocioException;
import br.com.sixsoftware.helpdesk.persistence.ClienteDAO;
import br.gov.frameworkdemoiselle.stereotype.BusinessController;
import br.gov.frameworkdemoiselle.template.DelegateCrud;

@BusinessController
public class ClienteBC extends DelegateCrud<Cliente, Long, ClienteDAO> {

	private static final long serialVersionUID = 1L;

	/**
	 * Método que efetua a inserção de um cliente no banco.
	 * 
	 * @param cliente
	 *            cliente a ser persistido
	 * @throws NegocioException
	 *             exceção de negócio encontrada
	 */
	public void inserirCliente(Cliente cliente) throws NegocioException {
		validarCliente(cliente);
		getDelegate().inserirCliente(cliente);
	}

	/**
	 * Método que efetua a alteração de um cliente no banco.
	 * 
	 * @param cliente
	 *            cliente a ser persistido
	 * @throws NegocioException
	 *             exceção de negócio encontrada
	 */
	public void alterarCliente(Cliente cliente) throws NegocioException {
		validarCliente(cliente);
		getDelegate().alterarCliente(cliente);
	}

	/**
	 * Método que efetua a validação dos clientes que estão sendo inseridos/alterados
	 * 
	 * @param cliente
	 *            cliente a ser persistido
	 * @throws NegocioException
	 *             exceção de negócio encontrada
	 */
	private void validarCliente(Cliente cliente) throws NegocioException {
		if(StringUtils.isEmpty(cliente.getLogin())) {
			throw new NegocioException("Login obrigatório");
		}
		if(StringUtils.isEmpty(cliente.getSenha())) {
			throw new NegocioException("Senha obrigatória");
		}
		if (!cliente.getSenha().equals(cliente.getConfirmacaoSenha())) {
			throw new NegocioException("Senha e confirmação de senha não conferem");
		}
	}

	public List<Cliente> listarTodosClientes() throws NegocioException {
		List<Cliente> listaClientes = getDelegate().listarTodosClientes();
		if (listaClientes.isEmpty()) {
			throw new NegocioException("Não foram encontrados clientes cadastrados no sistema");
		} else {
			return listaClientes;
		}
	}	
}
